#### 9.15.5 Register Naming

Register operands are always prefixed with ``%`'. The 80386 registers consist of

- the 8 32-bit registers ``%eax`' (the accumulator), ``%ebx`', ``%ecx`', ``%edx`', ``%edi`', ``%esi`', ``%ebp`' (the frame pointer), and ``%esp`' (the stack pointer).
- the 8 16-bit low-ends of these: ``%ax`', ``%bx`', ``%cx`', ``%dx`', ``%di`', ``%si`', ``%bp`', and ``%sp`'.
- the 8 8-bit registers: ``%ah`', ``%al`', ``%bh`', ``%bl`', ``%ch`', ``%cl`', ``%dh`', and ``%dl`' (These are the high-bytes and low-bytes of ``%ax`', ``%bx`', ``%cx`', and ``%dx`')
- the 6 section registers ``%cs`' (code section), ``%ds`' (data section), ``%ss`' (stack section), ``%es`', ``%fs`', and ``%gs`'.
- the 3 processor control registers ``%cr0`', ``%cr2`', and ``%cr3`'.
- the 6 debug registers ``%db0`', ``%db1`', ``%db2`', ``%db3`', ``%db6`', and ``%db7`'.
- the 2 test registers ``%tr6`' and ``%tr7`'.
- the 8 floating point register stack ``%st`' or equivalently ``%st(0)`', ``%st(1)`', ``%st(2)`', ``%st(3)`', ``%st(4)`', ``%st(5)`', ``%st(6)`', and ``%st(7)`'. These registers are overloaded by 8 MMX registers ``%mm0`', ``%mm1`', ``%mm2`', ``%mm3`', ``%mm4`', ``%mm5`', ``%mm6`' and ``%mm7`'.
- the 8 SSE registers registers ``%xmm0`', ``%xmm1`', ``%xmm2`', ``%xmm3`', ``%xmm4`', ``%xmm5`', ``%xmm6`' and ``%xmm7`'.

The AMD x86-64 architecture extends the register set by:

- enhancing the 8 32-bit registers to 64-bit: ``%rax`' (the accumulator), ``%rbx`', ``%rcx`', ``%rdx`', ``%rdi`', ``%rsi`', ``%rbp`' (the frame pointer), ``%rsp`' (the stack pointer)
- the 8 extended registers ``%r8`'–``%r15`'.
- the 8 32-bit low ends of the extended registers: ``%r8d`'–``%r15d`'
- the 8 16-bit low ends of the extended registers: ``%r8w`'–``%r15w`'
- the 8 8-bit low ends of the extended registers: ``%r8b`'–``%r15b`'
- the 4 8-bit registers: ``%sil`', ``%dil`', ``%bpl`', ``%spl`'.
- the 8 debug registers: ``%db8`'–``%db15`'.
- the 8 SSE registers: ``%xmm8`'–``%xmm15`'.